The present invention relates to the field of computer graphics, and in particular to methods and apparatus for animating computer generated characters. The present invention relates to the field of computer graphics. Many computer graphic images are created by mathematically modeling the interaction of light with a three dimensional scene from a given viewpoint. This process, called rendering, generates a two-dimensional image of the scene from the given viewpoint, and is analogous to taking a photograph of a real-world scene. Animated sequences can be created by rendering a sequence of images of a scene as the scene is gradually changed over time. A great deal of effort has been devoted to making realistic looking rendered images and animations.
In computer-generated animation, a character's appearance is defined by a three-dimensional computer model. To appear realistic, the computer model of a character is often extremely complex, having millions of surfaces and tens of thousands of attributes. Due to the complexity involved with animating such complex models, animation tools often rely on animation variables to define the character's animation.
Animation variables, which are sometimes referred to as avars, are parameters used by functions to modify the pose or bodily position of a character model. Animation variables and their associated functions are used to abstract complicated modifications to a character model to a relatively simple control. For example, animation variables can specify the rotation angles of the joints of a character model, thereby positioning the character model's limbs and appendages. More complicated animation variables can define the degree of opening of a character's mouth. In this example, the value of the animation variable is used to determine the position of the many different parts of the character model needed to open the characters mouth to the desired degree. The animation tools then modify the character model according to the final posed armature to create a character model with an open mouth.
Animation variables modify the character model by moving the character model's control points, which are points used to define the surface of the character model. A typical character model can have millions of control points. A series of deformers sequentially move each control point from an initial position through a series of intermediate positions to a final posed position. Each deformer is controlled by the value of at least one animation variable. Starting with the initial position of a control point, a first deformer outputs an intermediate position of the control point. The output of the first deformer is then input into a subsequent deformer, which in turn outputs a subsequent intermediate position. This is repeated for additional deformers associated with the control point, until a final control point position is determined. Typically, each control point is processed by hundreds different deformers to reach its final posed position. Thus, posing a character model with thousands of control points may require executing tens of thousands of different deformers.
To create artistically effective character animation, an animator often creates a rough version of a scene and then fine-tunes the character animation to create desired drama and expression of the final scene. This is analogous to a movie director rehearsing a scene with actors to capture the perfect mood for a scene. Because the animator is responsible for the expressiveness of the character animation, it is important that animation tools allow the animator to efficiently fine-tune a character animation and to accurately preview the final form of the animation.
Unfortunately, the time required to process a character model's numerous control points and associated deformers hinders the efficient fine-tuning of character animation. As animators adjust animation variables to create or fine tune a character's animation, the animation system must re-compute the character model in a new pose. Often, this is performed by re-computing the final posed position of every control point of a character model.
One prior approach to improving execution performance stores, or caches, the intermediate positions of each control point at each deformer of the character model. As animation variables are changed, some or all of the cached inputs can be reused, thereby bypassing the execution of some deformers. However, this approach requires large amounts of memory to store intermediate control point positions. For example, a character model having M control points each with N deformers will require caching up to M*N number of intermediate values.
It is therefore desirable to optimize the posing of character models to decrease the time required for processing control points. It is further desirable to make the animation system more responsive to animation variable adjustments and to make the computer animation process more efficient. It is further desirable that the optimization consume a minimal amount of additional memory and computing resources.